package cn.com.pansky.action.homePage;

import java.util.List;
import java.util.Set;
import java.util.Timer;

import net.vsame.url2sql.action.CommonAction;
import net.vsame.url2sql.helper.SqlHelper;
import net.vsame.url2sql.sql.Model;
import cn.com.pansky.action.logs.Log;
import cn.com.pansky.sdk.API;
import cn.com.pansky.task.QueryOrderTask;
import cn.com.pansky.util.DateUtil;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * 我要缴费
 * @author Administrator
 *
 */
public class PayAction extends CommonAction {
	
	private Log log = new Log();

	/**
	 * 获取我的缴费方式
	 */
	public void getPayType() {
		// 根据用户ID获取我的缴费方式
		String sql = urlConfig.getVar("queryPayType");
		String aa032 = user.getString("AA032");
		List<Model> list = SqlHelper.query(sql, aa032);
		context.put("result", list);
	}
	
	/**
	 * 根据，身份证号+缴费年度区间获取缴费记录
	 */
	public void getPayRecords() {
		String startYear = getParam("startYear"); // 开始年度
		String endYear = getParam("endYear"); // 截止年度
		String cardId = getCA006ByCA001(); // 身份证号
		// 根据开始年度，截止年度，姓名，身份证号获取缴费记录
		// 返回：年度，是否已缴费，年度升序排列
		JSONObject param = new JSONObject();
		param.put("AAA121", "A2002001"); //缴费记录标识
		param.put("AAC002", cardId); // 身份证号
		param.put("AAE041", startYear); // 开始年度
		param.put("AAE042", endYear); // 开始年度
		
		String userId = user.getString("AA001");
		param.put("AAE011", userId);
		System.out.println(param);
		JSONObject json = API.sendController("paymentGradeController.json", param);
		if(json.getBooleanValue("SUCCESS")) {
			JSONArray array = json.getJSONArray("MSG");
			String jsonStr = "[";
			for(int i = 0; i < array.size(); i++) {
				
				jsonStr += "{\"AAZ289\":[";
				JSONObject obj = JSONObject.parseObject(array.get(i).toString());
				String aae003 = obj.getString("AAE003");
				String aae354 = obj.getString("AAE354");
				JSONArray list = obj.getJSONArray("AAZ289");
				
				for(int j = 0; j < list.size(); j++) {
					JSONObject obj1 = JSONObject.parseObject(list.get(j).toString());
					Set<String> set = obj1.keySet();
					jsonStr+="{\"AAB301\":\""+set.iterator().next()+"\",\"AAA146\":\""+obj1.getString(set.iterator().next())+"\"},";
				}
				jsonStr = jsonStr.substring(0, jsonStr.length()-1);
				jsonStr+="],\"AAE003\":\""+aae003+"\",\"AAE354\":\""+aae354+"\"},";
			}
			jsonStr = jsonStr.substring(0, jsonStr.length()-1);
			jsonStr+="]";
			
			if (jsonStr.equals("") || null==jsonStr) {
				datas.put("isPass", false);
				datas.put("info", json.getString("MSG"));
			}else{
				datas.put("isPass", true);
				datas.put("datas", JSON.parseArray(jsonStr));
			}
		} else {
			datas.put("isPass", false);
			datas.put("info", json.getString("MSG"));
		}
		context.getDatas().put("result", datas);
	}
	
	/**
	 * 根据年度+缴费档次生成订单信息
	 */
	public void generateOrder() {
		
		//日志记录start
		String AF001 = log.start(getParam("CA001"), "DD");
		
		//session中保存CA001，缴费记录日志使用
//		context.getServletSession().setAttribute("CA001", getParam("CA001"));
		
		String cardId = getCA006ByCA001(); // 身份证号
		String records = getParam("records"); // 年度+缴费档次集合
		JSONObject param = new JSONObject();
		param.put("AAA121", "A2002002"); //生成订单信息标识
		param.put("AAC002", cardId); // 身份证号
		param.put("AAZ289", JSON.parse(records));
		//		TODO  AAA115增加补缴标识   10--正常   31- 补缴  40---一次性缴费
		String userId = user.getString("AA001");
		param.put("AAE011", userId);
		JSONObject object = API.sendController("paymentorderController.json", param);
		if(object.getString("PARAM") == null) {
			datas.put("info", object.getString("MSG"));
			datas.put("isPass", false);
		} else {
			JSONObject obj = JSONObject.parseObject(object.getString("PARAM"));
			JSONObject json = obj.getJSONObject("MSG");
			datas.put("isPass", true);
			datas.put("datas", json);
			context.getServletSession().setAttribute("orderWriteCA006", cardId);
			context.getServletSession().setAttribute("AAE051", json.getString("AAE051")); //商户ID
			context.getServletSession().setAttribute("BAB502", json.getString("BAB502")); //银行类别
			if("YC".equals(json.getString("BAB502"))) {
				String AAZ289 = json.getString("AAZ288")+DateUtil.current7Time();
				//写入数据库，以便下次支付前检查订单状态使用
				String sql = "insert into yc01 (AAZ288, AAZ289) VALUES (?, ?)";
				SqlHelper.execute(sql, json.getString("AAZ288"), AAZ289);
				json.put("AAZ288", AAZ289);
			}
			
//			JSONArray arr = JSONArray.parseArray(records);
//			if (arr.size() == 1) {
//				
//			}
			
			//订单生成后每5分钟请求一次订单查询功能
			System.out.println("线程start================================================");
			System.out.println("BAB502======="+json.getString("BAB502"));
			System.out.println("AAZ288======="+json.getString("AAZ288"));
			System.out.println("AAE051======="+json.getString("AAE051"));
			
			QueryOrderTask task = new QueryOrderTask();
			task.setBab502(json.getString("BAB502"));
			task.setOrderNumber(json.getString("AAZ288"));
			task.setMegId(json.getString("AAE051"));
			task.setEndTime(DateUtil.getTimeByMinute(30));
			task.setCardId(cardId);
			task.setAae001(((Model)context.getSessionVal("user")).getString("AA001"));
			Timer timer = new Timer();  
	        timer.schedule(task, 1000, 1000*60*3); //每 3 钟执行 一次订单状态查询 ,30 分钟后无论成功失败停止任务。
		}
		
		//日志记录end
		boolean result = log.end(AF001, datas.get("isPass"), "");
		System.out.println("日志：生成订单："+result);
		
		context.getDatas().put("result", datas);
	}
	
	/**
	 * 根据银行卡id获取银行卡信息
	 */
	public void getBankInfo() {
		String ag011 = getParam("AG011"); // 银行卡id
		// 根据银行卡id获取对应的信息
		String sql = urlConfig.getVar("queryRA05ById");
		Model model = SqlHelper.queryOne(sql, ag011);
		context.put("result", model);
	}
	
	/**
	 * 确认缴费
	 */
	public void confirmPay() {
		JSONObject param = new JSONObject();
		param.put("AAA121", "A2002003"); // 缴费标识
		param.put("AAC002", getCA006ByCA001()); // 身份证号
		param.put("AAZ065", getParam("AAZ065")); // 银行ID
		param.put("AAE010", getParam("AAE010")); // 当事人缴费账号
		param.put("AAE074", getParam("AAE074")); // 银行缴费流水号
		param.put("AAE022", getParam("AAE022")); // 缴费金额
		param.put("AAZ288", getParam("AAZ288")); // 社保流水号
		// 调用核心业务接口，传入账户信息进行缴费操作
		String userId = user.getString("AA001");
		param.put("AAE011", userId);
		JSONObject object = API.sendController("paymentController.json", param);
		System.out.println(""+object);
		datas.put("isPass", object.getBoolean("SUCCESS"));
		datas.put("info", object.getString("MSG"));
	}
}
